package my.design.proxy;

/**
 * @author zp
 * @version 1.0
 * @description: 代理主题角色 中介对象
 * 定义:代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用。
 * 代理模式中的角色：
 *
 * 抽象主题角色（Subject）：声明了目标对象和代理对象的共同接口，这样一来在任何可以使用目标对象的地方都可以使用代理对象。
 * 具体主题角色（RealSubject)：也称为委托角色或者被代理角色。定义了代理对象所代表的目标对象。
 * 代理主题角色（Proxy)：也叫委托类、代理类。代理对象内部含有目标对象的引用，从而可以在任何时候操作目标对象；代理对象提供一个与目标对象相同的接口，以便可以在任何时候替代目标对象。代理对象通常在客户端调用传递给目标对象之前或之后，执行某个操作，而不是单纯地将调用传递给目标对象。
 * 代理模式又分为静态代理和动态代理。
 *  静态代理是由程序猿创建或特定工具自动生成源代码，再对其编译。在程序运行前，代理类的.class文件就已经存在了。在编译前进行增强是我们自己写的
 *  动态代理是在程序运行时，通过运用反射机制动态的创建而成。是不需要我们写代理类的(通常使用的JDK的动态代理（基于接口）和CGLIB（基于继承类）)
 * @date 2022/10/16 15:45
 */
public class Proxy implements Rent{
    private final Rent host;

    public Proxy(Rent host) {
        this.host = host;
    }

    @Override
    public void rent() {
        host.rent();
        price();
        hetong();
    }

    //中介费
    public void price(){
        System.out.println("中介收中介费");
    }
    //合同
    public void hetong(){
        System.out.println("中介签合同");
    }
}
